package com.zsp.coupon.vo;


import com.zsp.coupon.constant.PeriodType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
 * 优惠卷股规则定义*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TemplateRule {

    //优惠卷过期规则
    private  Exception exception;
    //折扣
    private  Discount discount;
    //每个人最多可以领几张的限制
    private  Integer limitaion;
    //使用范围
    private  Usage usage;
//权重，可以和哪些优惠卷叠加使用,同一类优惠卷不可以叠加 list[] 优惠卷的唯一编码
    private String weight;

//    校验功能

    public  boolean vaildate() {
        return  exception.validate() && discount.validate()
                && limitaion > 0 && usage.validate()
                && StringUtils.isNotEmpty(weight);
    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    //有效期的规则
    public static class Exception{
        //有效期规则 对应periodType的code字段
        private Integer period;
//        有效间隔，只对变动有效期有效
        private  Integer gap;
        //优惠卷模板失效期，两类规则都有效
        private Long deadline;
        boolean validate(){
            return null != PeriodType.of(period)&&gap>0 &&deadline>0;
        }

    }

    //折扣 ，需要与类型配合决定
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Discount{
// 额度，满减（20） 折扣（85） 立减10
        private  Integer quota;
        //基准，满多少可以用
        private  Integer base;
     boolean validate() {
        return  quota > 0 && base > 0;
     }
    }


    ///使用范围
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static  class  Usage{
        //省份
        private  String province;
        //城市
        private String city;
        //商品类型 list[文娱，生鲜，家居，食品类]
        private  String goodsType;

        boolean validate(){
            return StringUtils.isNotEmpty(province)
                    && StringUtils.isNotEmpty(city)
                    && StringUtils.isNotEmpty(goodsType);
        }
    }
}
